文章使用Unity 2019 LTS
寫程式必然會出現Bug,對於找出Bug的方法,從直接把資料輸出在螢幕上到利用Debugger下中斷點,一行一行的去追查問題所在。
寫Shader也是一樣,我們常會遇到像是破圖,或是光影成相不正確的Bug。Unity在5.0版本的時候,有了Frame Debugger這個利器,方便我們開發者可以一幀一幀的查看物件是怎麼繪製到螢幕上的,今天就來簡單的介紹怎麼使用這個工具。
首先,我們要先打開Frame Debugger的視窗:
Create -> Windows -> Analysis -> Frame Debugger
利用我們Day6介紹的漫反射當作範例,按下Frame Debugger視窗左上方的Enable,會看到兩排密密麻麻的狀態。
上方的滑桿與旁邊的百分比數字(1)表示Unity的渲染器在畫這一幀的時候,經過了多少步驟和當前的步驟,左半邊(2)就是這些步驟的詳細情況。
右半邊(3)顯示的是這個Shader的屬性,以及選擇這一幀繪製的情況,可以點選看看這些步驟,以及畫面的顯示結果。
上述提到的「步驟」,它有一個專有名詞叫做Draw call。
Draw call是指CPU呼叫GPU繪製圖形的指令,還記得Day3提到的CPU到GPU的過程嗎?Draw call就是開發者由應用階段傳遞到GPU管線的橋樑,在實作上其實就是一個API,例如OpenGL的glDrawArrays()
。
Draw call也與渲染方面的優化有關,但這裡就不在繼續展開講述,有興趣的讀者可以搜尋「Batch Rendering」之類的關鍵字。
水了一篇,這篇簡單的介紹了Frame Debugger這項工具以及Draw call是甚麼?其實想想我應該在介紹管線之前,就講解甚麼是Draw call,所以相對來講,這篇也是補充我之前漏掉的部分。